package com.cg.asm.body.util.constants;

import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * @author: yzj
 * @description: 数据字典枚举类
 * @date: 2018/07/17 10:15
 */
public enum DicEnum {

    //====================================================================================
    USER_ACCOUNT_STATUS_START("true", "启用", EnumGroup.USER_ACCOUNT_STATUS),
    USER_ACCOUNT_STATUS_STOP("false", "禁用", EnumGroup.USER_ACCOUNT_STATUS),
    //====================================================================================
    USER_ACCOUNT_TYPE_MANAGER("sys_manager", "系统管理员", EnumGroup.USER_ACCOUNT_TYPE),
    USER_ACCOUNT_TYPE_UNIVERSAL("sys_universal", "普通用户", EnumGroup.USER_ACCOUNT_TYPE),
    //====================================================================================
    USER_GENDER_MALE("male", "男", EnumGroup.USER_GENDER),
    USER_GENDER_FAMALE("female", "女", EnumGroup.USER_GENDER),
    //====================================================================================
    FUN_LIST_TYPE_GROUP("group", "分组菜单", EnumGroup.FUN_LIST_TYPE),
    FUN_LIST_TYPE_FUNCTION("function", "功能菜单", EnumGroup.FUN_LIST_TYPE),
    //====================================================================================
    ROLE_TYPE_MANAGER("manager", "管理角色", EnumGroup.ROLE_TYPE),
    ROLE_TYPE_EXECUTE("execute", "执行角色", EnumGroup.ROLE_TYPE),
    //====================================================================================
    USER_GROUP_INTERNAL("1", "内置分组", EnumGroup.USER_GROUP_TYPE),
    USER_GROUP_OTHER("2", "其他分组", EnumGroup.USER_GROUP_TYPE),
    //====================================================================================
    YES("yes", "是", EnumGroup.SF),
    NO("no", "否", EnumGroup.SF),
    //====================================================================================
    DESIGNING("designing", "设计中", EnumGroup.STATUS_GROUP),
    START("start", "启用", EnumGroup.STATUS_GROUP),
    STOP("stop", "停用", EnumGroup.STATUS_GROUP);

    @Getter
    private String key;
    @Getter
    private String value;
    @Getter
    private EnumGroup enumGroup;

    DicEnum(String key, String value, EnumGroup enumGroup) {
        this.key = key;
        this.value = value;
        this.enumGroup = enumGroup;
    }

    /**
     * 获取指定分组下的所有枚举信息
     *
     * @param enumGroup
     * @return
     */
    public static Map<String, String> getEnum(EnumGroup enumGroup) {
        Map<String, String> options = new HashMap<>();
        for (DicEnum e : DicEnum.values()) {
            if (e.getEnumGroup().equals(enumGroup)) {
                options.put(e.getKey(), e.getValue());
            }
        }
        return options;
    }

    /**
     * 根据枚举Key与分组对象获取Value
     *
     * @param key
     * @param enumGroup
     * @return
     */
    public static String getValue(String key, EnumGroup enumGroup) {
        for (DicEnum e : DicEnum.values()) {
            if (e.getKey().equals(key) && e.getEnumGroup().equals(enumGroup)) {
                return e.getValue();
            }
        }
        return null;
    }
}
